/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.gob.fonafe.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;
import pe.gob.fonafe.dao.InmuebleDAO;
import pe.gob.fonafe.dao.impl.stored.ActualizarInmuebleSP;
import pe.gob.fonafe.dao.impl.stored.EliminarGaleriaInmuebleSP;
import pe.gob.fonafe.dao.impl.stored.EliminarInmuebleSP;
import pe.gob.fonafe.dao.impl.stored.ListarGLCInmuebleSP;
import pe.gob.fonafe.dao.impl.stored.ListarGaleriaFotosByInmuebleSP;
import pe.gob.fonafe.dao.impl.stored.ListarInmuebleSP;
import pe.gob.fonafe.dao.impl.stored.ListarTipoInmuebleSP;
import pe.gob.fonafe.dao.impl.stored.ListarTopInmuebleSP;
import pe.gob.fonafe.dao.impl.stored.RegistraConsultaReclamosSP;
import pe.gob.fonafe.dao.impl.stored.RegistraFilesConsultaReclamoSP;
import pe.gob.fonafe.dao.impl.stored.RegistraFilesGaleriaImnuebleSP;
import pe.gob.fonafe.dao.impl.stored.RegistraInmuebleSP;
import pe.gob.fonafe.domain.ConsultaReclamoBean;
import pe.gob.fonafe.domain.GaleriaFotosBean;
import pe.gob.fonafe.domain.InmuebleBean;
import pe.gob.fonafe.domain.TipoInmuebleBean;

/**
 *
 * @author czela
 */

@Repository
public class InmuebleDAOImpl extends SimpleJdbcDaoSupport implements InmuebleDAO{

   private static final Logger logger = Logger.getLogger(InmuebleDAOImpl.class);

   @Autowired 
   public InmuebleDAOImpl(DataSource dataSource) {
        super.setDataSource(dataSource);
    }

   public List<InmuebleBean> busqueda(String ubigeo, int tipInmueble, String tipContrato, String tipMoneda, String desde, String hasta, int id_empresa) {
        List<InmuebleBean> listaResult = new ArrayList<InmuebleBean>();
        try{
            ListarInmuebleSP sp = new ListarInmuebleSP(getDataSource());
            Map results = sp.execute(ubigeo, tipInmueble, tipContrato, tipMoneda, desde, hasta,id_empresa);
            listaResult = (List<InmuebleBean>) results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        
        
        return listaResult;
    }
   
   public List<InmuebleBean> busquedaGLC(String ubigeo, int tipInmueble, String tipContrato, String tipMoneda, String desde, String hasta, int id_empresa,String estado) {
        List<InmuebleBean> listaResult = new ArrayList<InmuebleBean>();
        try{
            ListarGLCInmuebleSP sp = new ListarGLCInmuebleSP(getDataSource());
            Map results = sp.execute(ubigeo, tipInmueble, tipContrato, tipMoneda, desde, hasta,id_empresa,estado);
            listaResult = (List<InmuebleBean>) results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        
        
        return listaResult;
    }


    public List<GaleriaFotosBean> getGaleriaPorInmuble(String idInmuble) {
        List<GaleriaFotosBean> listGaleriaResult = new ArrayList<GaleriaFotosBean>();
        try{
            ListarGaleriaFotosByInmuebleSP sp = new ListarGaleriaFotosByInmuebleSP(getDataSource());
            Map results = sp.execute(idInmuble);
            listGaleriaResult = (List<GaleriaFotosBean>)results.get("cCURSOR");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listGaleriaResult;
    }

    public String[] registrarConsultaReclamo(ConsultaReclamoBean consultaReclamoBean) {
        String[] outputs = new String[2];
        try{
            RegistraConsultaReclamosSP sp = new RegistraConsultaReclamosSP(getDataSource());
            Map results = sp.execute(consultaReclamoBean);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch (Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }

    public String[] registraFilesConsultaReclamo(String idConsRec, String idInmuble, byte[] file,String nomFile,String typeFile) {
        String[] outputs = new String[2];
        try{
            RegistraFilesConsultaReclamoSP sp = new RegistraFilesConsultaReclamoSP(getDataSource());
            Map results = sp.execute(idConsRec, idInmuble, file,nomFile,typeFile);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }

    public List<TipoInmuebleBean> ListarTipoInmueble() {
         List<TipoInmuebleBean> listResult = new ArrayList<TipoInmuebleBean>();
        try{
            ListarTipoInmuebleSP sp = new ListarTipoInmuebleSP(getDataSource());
            Map results = sp.execute();
            logger.info("antes ");
            listResult = (List<TipoInmuebleBean>)results.get("cCursor");
            logger.info("lista de tipo inmueble "+listResult.size());
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listResult;
    }

    public String[] actualizarDetInmuebleGLC(InmuebleBean inmuebleBean) {
        String[] outputs = new String[2];
        try{
            ActualizarInmuebleSP sp = new ActualizarInmuebleSP(getDataSource());
            Map results = sp.execute(inmuebleBean);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }

    public String[] EliminarGalInmueble(String idsGaleriaInm) {
       String[] outputs = new String[2];
        try{
            EliminarGaleriaInmuebleSP sp = new EliminarGaleriaInmuebleSP(getDataSource());
            Map results = sp.execute(idsGaleriaInm);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }

    public String[] registrarGaleriaInmueble(String idInmueble, byte[] fileToArrayBytes) {
        String[] outputs = new String[2];
        try{
            RegistraFilesGaleriaImnuebleSP sp = new RegistraFilesGaleriaImnuebleSP(getDataSource());
            Map results = sp.execute(idInmueble, fileToArrayBytes);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }

    public String[] guardarInmuebleGLC(InmuebleBean inmuebleBean) {
         String[] outputs = new String[2];
        try{
            RegistraInmuebleSP sp = new RegistraInmuebleSP(getDataSource());
            Map results = sp.execute(inmuebleBean);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch (Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }

    public String[] eliminarInmuebleGLC(String idInmueble) {
         String[] outputs = new String[2];
        try{
            EliminarInmuebleSP sp = new EliminarInmuebleSP(getDataSource());
            Map results = sp.execute(idInmueble);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch (Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }

    public List<InmuebleBean> ObtenerTopInmueble() {
         List<InmuebleBean> listaResult = new ArrayList<InmuebleBean>();
        try{
            ListarTopInmuebleSP sp = new ListarTopInmuebleSP(getDataSource());
            Map results = sp.execute();
            listaResult = (List<InmuebleBean>) results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        
        return listaResult;
    }

}
